package net.suncaper.mvc.service;

import net.suncaper.mvc.model.domain.Hotel;

import java.math.BigDecimal;
import java.util.List;

/**
 * 酒店业务接口
 */
public interface IHotelService {
    /**
     * 添加酒店
     *
     * @param hotel 酒店信息
     * @return 添加结果
     */
    boolean addHotel(Hotel hotel);

    /**
     * 根据酒店名称获取酒店信息
     *
     * @param hotelName 酒店名称
     * @return 酒店信息
     */
    Hotel getHotelByName(String hotelName);
    
    /**
     * 根据用户ID获取酒店信息
     *
     * @param userId 用户ID
     * @return 酒店信息，如果用户不是酒店商家则返回null
     */
    Hotel getHotelByUserId(String userId);

    /**
     * 获取所有酒店信息
     *
     * @return 酒店列表
     */
    List<Hotel> getAllHotels();

    /**
     * 根据国家和城市筛选酒店
     *
     * @param country 国家
     * @param city    城市
     * @return 酒店列表
     */
    List<Hotel> getHotelsByLocation(String country, String city);

    /**
     * 根据评分筛选酒店
     *
     * @param minRating 最低评分
     * @param maxRating 最高评分
     * @return 酒店列表
     */
    List<Hotel> getHotelsByRating(BigDecimal minRating, BigDecimal maxRating);

    /**
     * 更新酒店信息
     *
     * @param hotel 酒店信息
     * @return 更新结果
     */
    boolean updateHotel(Hotel hotel);
    
    /**
     * 删除酒店
     *
     * @param hotelName 酒店名称
     * @return 删除结果
     */
    boolean deleteHotel(String hotelName);

    /**
     * 根据用户ID获取其管理的酒店名称
     *
     * @param userId 用户ID
     * @return 酒店名称，如果用户不是酒店商家则返回null
     */
    String getHotelNameByUserId(String userId);
    
    /**
     * 根据酒店名称获取酒店拥有者ID
     *
     * @param hotelName 酒店名称
     * @return 酒店拥有者ID，如果酒店不存在则返回null
     */
    String getHotelOwnerIdByName(String hotelName);
    
    /**
     * 更新酒店评分
     *
     * @param hotelName 酒店名称
     * @param rating 新的评分
     * @return 更新结果
     */
    boolean updateHotelRating(String hotelName, BigDecimal rating);
}